package com.unionbigdata.teaching.util;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.stream.Collectors;

public class PageMapperUtil {

    /**
     * 将分页结果映射为另一个类
     *
     * @param sourcePage 源分页结果
     * @param targetClass 目标类类型
     * @param <T> 源对象类型
     * @param <R> 目标对象类型
     * @return 映射后的分页结果
     */
    public static <T, R> Page<R> mapPage(Page<T> sourcePage, Class<R> targetClass) {
        // 创建目标分页对象
        Page<R> targetPage = new Page<>(sourcePage.getCurrent(), sourcePage.getSize(), sourcePage.getTotal());

        // 获取源分页的记录并转换为目标类型
        List<R> targetRecords = sourcePage.getRecords().stream()
                .map(source -> {
                    try {
                        // 创建目标对象实例
                        R target = targetClass.getDeclaredConstructor().newInstance();
                        // 使用Spring的BeanUtils拷贝相同字段
                        BeanUtils.copyProperties(source, target);
                        return target;
                    } catch (Exception e) {
                        throw new RuntimeException("分页映射失败: " + e.getMessage(), e);
                    }
                })
                .collect(Collectors.toList());

        // 设置目标分页的记录
        targetPage.setRecords(targetRecords);
        return targetPage;
    }
}
